package conn

import "time"

type Secret struct {
	Password string
	Conn     *Conn
}

func NewSecret(p string, conn *Conn) *Secret {
	return &Secret{
		Password: p,
		Conn:     conn,
	}
}

type Link struct {
	ConnType     string //连接类型
	Host         string //目标
	Crypt        bool   //加密
	Compress     bool
	LocalProxy   bool
	RemoteAddr   string
	ProtoVersion string
	Option       Options
}

type Option func(*Options)

type Options struct {
	Timeout time.Duration
}

var defaultTimeOut = time.Second * 5

func NewLink(connType string, host string, crypt bool, compress bool, remoteAddr string, localProxy bool, protoVersion string, opts ...Option) *Link {
	options := newOptions(opts...)

	return &Link{
		RemoteAddr:   remoteAddr,
		ConnType:     connType,
		Host:         host,
		Crypt:        crypt,
		Compress:     compress,
		LocalProxy:   localProxy,
		ProtoVersion: protoVersion,
		Option:       options,
	}
}

func newOptions(opts ...Option) Options {
	opt := Options{
		Timeout: defaultTimeOut,
	}
	for _, o := range opts {
		o(&opt)
	}
	return opt
}

func LinkTimeout(t time.Duration) Option {
	return func(opt *Options) {
		opt.Timeout = t
	}
}
